package com.sihan.framework.etm.service.business;

import java.util.List;
import java.util.Map;

import com.framework.model.ApiResult;
import com.sihan.framework.etm.common.PageRequest;
import com.framework.model.PageResult;
import com.framework.mybatis.service.BaseService;
import com.sihan.framework.etm.dto.business.DeviceWarehouseDTO;
import com.sihan.framework.etm.dto.business.ToolBorrowReturnRecordDTO;
import com.sihan.framework.etm.entity.baseData.ToolModel;
import com.sihan.framework.etm.entity.business.ToolBorrowDetail;
import com.sihan.framework.etm.entity.business.ToolBorrowMaster;
import com.sihan.framework.etm.entity.business.ToolBorrowPlanDetail;
import com.sihan.framework.etm.entity.business.ToolReturnMaster;
import com.sihan.framework.etm.vo.business.BorrowDetailVO;
import com.sihan.framework.etm.vo.business.BorrowPlanVO;
import com.sihan.framework.etm.vo.business.DevicePdVO;
import com.sihan.framework.etm.vo.business.ReturnDetailVO;
import com.sihan.framework.etm.vo.business.ToolBorrowReturnRecordVO;
import com.sihan.framework.etm.vo.business.ToolQueryVO;

public interface BorrowService extends BaseService<ToolModel, String>{

	/**
	 * 
	 * @description 查询用户的最近一次领用计划
	 * @param userId
	 * @return
	 * @auther 韩兵
	 * @Date 2020年7月7日
	 * @return List<BorrowPlanVO>
	 */
	List<BorrowPlanVO> selectLastNoDoneBorrowPlan();
	/**
	 * 
	 * @description 计划的明细
	 * @param masterId
	 * @return
	 * @auther 韩兵
	 * @Date 2020年7月7日
	 * @return PageResult<BorrowDetailVO>
	 */
	PageResult<BorrowDetailVO> selectBorrowDetailByMasterId(PageRequest dto);
	/**
	 * 
	 * @description 确认领取清单
	 * @param userId
	 * @return
	 * @auther 韩兵
	 * @Date 2020年7月7日
	 * @return ApiResult
	 */
	ApiResult<ToolBorrowMaster> confirmBorrow(Boolean confirm, String cause, String startTime, String endTime);
	
	/**
	 * 
	 * @description 查询归还统计
	 * @return
	 * @auther 韩兵
	 * @Date 2020年7月7日
	 * @return List<BorrowPlanVO>
	 */
	List<BorrowPlanVO> selectReturnStatisticsByUserId();
	
	/**
	 * 
	 * @description 归还明细列表
	 * @param dto
	 * @return
	 * @auther 韩兵
	 * @Date 2020年7月8日
	 * @return PageResult<ReturnDetailVO>
	 */
	PageResult<ReturnDetailVO> selectReturnDetailByMasterId(PageRequest dto);
	/**
	 * 
	 * @description 确认归还清单
	 * @param userId
	 * @return
	 * @auther 韩兵
	 * @Date 2020年7月7日
	 * @return ApiResult
	 */
	ApiResult<ToolReturnMaster> confirmRetrun();
	
	/**
	 * 
	 * @description  领取归还台账记录
	 * @param dto
	 * @return
	 * @auther 韩兵
	 * @Date 2020年7月9日
	 * @return PageResult<ToolBorrowReturnRecordVO>
	 */
	PageResult<ToolBorrowReturnRecordVO> selectToolBorrowReturnRecord(ToolBorrowReturnRecordDTO dto);
	/**
	 * 
	 * @description  生成领用记录
	 * @param deviceWarehouses
	 * @auther 韩兵
	 * @Date 2020年7月9日
	 * @return void
	 */
	void productBorrowRecord(DeviceWarehouseDTO deviceWarehouse);
	/**
	 * 
	 * @description  生成归还记录
	 * @param deviceWarehouses
	 * @auther 韩兵
	 * @Date 2020年7月9日
	 * @return void
	 */
	void productReturnRecord(DeviceWarehouseDTO deviceWarehouse);
	
	/**
	 * 
	 * @description  异常上报与取消
	 * @param type
	 * @param toolCode
	 * @return
	 * @auther 韩兵
	 * @Date 2020年7月10日
	 * @return ApiResult
	 */
	@SuppressWarnings("rawtypes")
	ApiResult toolExceptionRecord(String retrunId);
	
	/**
	 * 
	 * @description  领用数量统计
	 * @auther 周思宇
	 * @Date 2020年7月14日
	 * @return Integer
	 */
	Integer getBorrowQuantity(String id);
	
	/**
	 * 
	 * @description  各个类型领用数量统计
	 * @auther 周思宇
	 * @Date 2020年7月14日
	 * @return List<Map<String, String>>
	 */
	List<Map<String, String>> getBorrowQuantityEachType(String id);
	
	/**
	 * 
	 * @description  领用工器具RFID编号和型号
	 * @auther 周思宇
	 * @Date 2020年7月14日
	 * @return List<Map<String, String>>
	 */
	List<Map<String, String>> getBorrowRfidAndModel(String id);
	
	/**
	 * 
	 * @description  扫描数量统计
	 * @auther 周思宇
	 * @Date 2020年7月14日
	 * @return Integer
	 */
	Integer getScanQuantity(List<String> rfids);
	
	/**
	 * 
	 * @description  各个类型扫描数量统计
	 * @auther 周思宇
	 * @Date 2020年7月14日
	 * @return List<Map<String, String>>
	 */
	List<Map<String, String>> getScanQuantityEachType(List<String> rfids);
	
	/**
	 * 
	 * @description  rfid编号和型号列表
	 * @auther 周思宇
	 * @Date 2020年7月14日
	 * @return List<Map<String, String>>
	 */
	List<Map<String, String>> getScanRfidAndModel(List<String> rfids);
	
	/**
	 * 
	 * @description  设备盘点-领用扫描对比、缺失类型数量统计
	 * @auther 周思宇
	 * @Date 2020年7月15日
	 * @return DevicePdVO
	 */
	DevicePdVO getDevicePdInfo(List<String> rfids, String id);
	
	/**
	 * 
	 * @description  设备查看-工器具详情
	 * @auther 周思宇
	 * @Date 2020年7月15日
	 * @return ToolQueryVO
	 */
	ToolQueryVO getToolDetail(String rfid);
	
	/**
	 * 
	 * @description  查询设备最近一次的领用时间及归还时间
	 * @auther 周思宇
	 * @Date 2020年7月15日
	 * @return ToolQueryVO
	 */
	ToolBorrowDetail getOutAndInDate(String id);
	
	/**
	 * 
	 * @description  修改领用详情的状态为异常上报
	 * @auther 周思宇
	 * @Date 2020年7月15日
	 * @return void
	 */
	void updateBorrowDetailStatus(String id);

	/**
	 * 
	 * @description  查询工器具类型列表
	 * @auther 周思宇
	 * @Date 2020年7月20日
	 * @return void
	 */
	List<Map<String, String>> getToolTypeList();
	
	/**
	 * 
	 * @description 领用计划明细的获取
	 * @param planName
	 * @return
	 * @auther 韩兵
	 * @Date 2020年8月27日
	 * @return List<ToolBorrowPlanDetail>
	 */
	List<ToolBorrowPlanDetail> getBorrowPlan(String planName);
	
	/**
	 * 
	 * @description 领用计划的图片
	 * @param param
	 * @return
	 * @auther 韩兵
	 * @Date 2020年8月30日
	 * @return ApiResult<?>
	 */
	ApiResult<?> planBookImg(String img);
}
